home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 49 / Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso / -serious- / programming / e / lsestuff / old / dynamic_bitfield.e < prev    next >
Text File  |  1999-11-29  |  1KB  |  63 lines

  1. OPT MODULE ->bitfield.e
  2.  
  3. MODULE 'mymods/bits',
  4.        'myoo/xl'
  5.  
  6. OBJECT bits32 OF xni
  7.    bits32:LONG
  8. ENDOBJECT
  9.  
  10.  
  11. EXPORT OBJECT dynamic_bitfield
  12.    PRIVATE
  13.    xli:PTR TO xli
  14. ENDOBJECT
  15.  
  16. PROC dynamic_bitfield() OF dynamic_bitfield
  17.    NEW self.xli
  18. ENDPROC
  19.  
  20. PROC end() OF dynamic_bitfield
  21.    self.xli.fastdisposeall(SIZEOF bits32)
  22.    END self.xli
  23. ENDPROC
  24.  
  25. PROC set(bitnum) OF dynamic_bitfield
  26.    DEF nodenum, node:PTR TO bits32, nodebitnum
  27.    nodenum:=bitnum/32
  28.    node:=self.xli.find(nodenum)
  29.    IF node = NIL
  30.       node:=FastNew(SIZEOF bits32)
  31.       self.xli.addtail(node)
  32.       node.id:=nodenum
  33.    ENDIF
  34.    nodebitnum:=bitnum - (nodenum * 32)
  35.    node.bits32:=bitset(node.bits32, nodebitnum)
  36. ENDPROC
  37.  
  38. PROC clr(bitnum) OF dynamic_bitfield
  39.    DEF nodenum, node:PTR TO bits32, nodebitnum
  40.    nodenum:=bitnum/32
  41.    node:=self.xli.find(nodenum)
  42.    IF node
  43.       nodebitnum:=bitnum - (nodenum * 32)
  44.       node.bits32:=bitclr(node.bits32, nodebitnum)
  45.       IF node.bits32 = NIL
  46.          self.xli.remove(node)
  47.          FastDispose(node, SIZEOF bits32)
  48.       ENDIF
  49.    ENDIF
  50. ENDPROC
  51.  
  52. PROC get(bitnum) OF dynamic_bitfield
  53.    DEF nodenum, node:PTR TO bits32, nodebitnum
  54.    nodenum:=bitnum/32
  55.    node:=self.xli.find(nodenum)
  56.    IF node
  57.       nodebitnum:=bitnum - (nodenum * 32)
  58.       RETURN bitget(node.bits32, nodebitnum)
  59.    ENDIF
  60. ENDPROC NIL
  61.  
  62.  
  63.